package com.maozzi.other;

import java.util.Arrays;

/**
 * 已知连续正整数数列{K}=K1,K2,K3...Ki的各个数相加之和为S，i=N (0<S<100000, 0<N<100000), 求此数列K。
 * 输入描述：输入包含两个参数，1）连续正整数数列和S，2）数列里数的个数N。
 * 输出描述：如果有解输出数列K，如果无解输出-1
 * 示例1：
 * 输入：525 6
 * 输出：85 86 87 88 89 90
 */
public class ContinuousIntSequence {
    public static void main(String[] args) {
        int[] arr = test(525, 7);
        System.out.println(Arrays.toString(arr));

        arr = test2(525, 7);
        System.out.println(Arrays.toString(arr));
    }

    public static int[] test(int s, int n) {
        int[] res = new int[n];
        for (int i = 1; i <= s / 2; i++) {
            int temp = 0;
            for (int j = 0; j < n; j++) {
                temp += j + i;
                res[j] = j + i;
            }
            if (temp == s) {
                break;
            }
        }
        return res;
    }

    /**
     * 连续的整数和，假设开始的整数为m
     * s = m + (m+1) + (m+2) + (m+3) + (m+4) + ... + (m+n-1)
     * 整理后：s = mn + (n*(0 + n-1)/2)
     * 再整理：m = s/n - (n-1)/2
     */
    public static int[] test2(int s, int n) {
        int m = s / n - (n - 1) / 2;
        if (m < 0) {
            return new int[0];
        }
        int[] res = new int[n];
        for (int j = 0; j < n; j++) {
            res[j] = j + m;
        }
        return res;
    }
}
